import { log } from '@main/core/logger';
import userManager from '@main/core/user';
import { LoginResponse, UserInfo } from '@shared/types.d';

/**
 * 创建新用户
 * @param name 用户名
 * @returns 新用户的ID
 */
export async function createUser(name: string): Promise<string> {
  try {
    if (!name || name.trim().length === 0) {
      throw new Error('用户名不能为空');
    }

    const userId = await userManager.createUser(name.trim());
    log.info(`创建用户成功: ${name} (${userId})`);
    return userId;
  } catch (error) {
    log.error('创建用户失败:', error);
    throw new Error('创建用户失败');
  }
}

/**
 * 用户登录（加锁）并返回JWT token
 * @param userId 用户ID
 */
export async function login(userId: string): Promise<LoginResponse> {
  try {
    if (!userId || userId.trim().length === 0) {
      throw new Error('用户ID不能为空');
    }

    const token = await userManager.login(userId);

    // 获取用户信息
    const users = await userManager.getAllUsers();
    const user = users.find((u) => u.id === userId);

    if (!user) {
      throw new Error('用户不存在');
    }

    log.info(`用户登录成功: ${userId}`);
    return {
      token,
      user
    };
  } catch (error) {
    log.error('用户登录失败:', error);
    throw new Error('登录失败');
  }
}

/**
 * 用户注销（释放锁）
 */
export async function logout(userId: string): Promise<void> {
  try {
    if (!userId || userId.trim().length === 0) {
      throw new Error('用户ID不能为空');
    }

    await userManager.logout(userId);
    log.info(`用户注销成功: ${userId}`);
  } catch (error) {
    log.error('用户注销失败:', error);
    throw new Error('注销失败');
  }
}

/**
 * 删除用户
 * @param userId 用户ID
 */
export async function deleteUser(userId: string): Promise<boolean> {
  try {
    if (!userId || userId.trim().length === 0) {
      throw new Error('用户ID不能为空');
    }

    const result = await userManager.deleteUser(userId);
    if (result) {
      log.info(`删除用户成功: ${userId}`);
      return true;
    } else {
      return false;
    }
  } catch (error) {
    log.error('删除用户失败:', error);
    throw new Error('删除用户失败');
  }
}

/**
 * 重命名用户
 * @param userId 用户ID
 * @param newName 新用户名
 */
export async function renameUser(userId: string, newName: string): Promise<void> {
  try {
    if (!userId || userId.trim().length === 0) {
      throw new Error('用户ID不能为空');
    }

    if (!newName || newName.trim().length === 0) {
      throw new Error('新用户名不能为空');
    }

    const result = await userManager.renameUser(userId, newName.trim());
    if (result) {
      log.info(`重命名用户成功: ${userId} -> ${newName}`);
    } else {
      throw new Error('用户不存在');
    }
  } catch (error) {
    log.error('重命名用户失败:', error);
    throw new Error('重命名用户失败');
  }
}

/**
 * 获取所有用户列表
 */
export async function getAllUsers(): Promise<UserInfo[]> {
  try {
    const users = await userManager.getAllUsers();
    return users;
  } catch (error) {
    log.error('获取用户列表失败:', error);
    throw new Error('获取用户列表失败');
  }
}
